package com.heima.media.service.impl;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.heima.common.dto.ResponseResult;
import com.heima.common.enums.AppHttpCodeEnum;
import com.heima.common.util.AppJwtUtil;
import com.heima.media.dto.LoginDto;
import com.heima.media.entity.WmUser;
import com.heima.media.mapper.WmUserMapper;
import com.heima.media.service.IWmUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Service
public class WmUserServiceImpl extends ServiceImpl<WmUserMapper, WmUser> implements IWmUserService{



    @Override
    public ResponseResult<WmUser> saveWmUser(WmUser wmUser) {
//        先判断关键字是否为空
        if(wmUser==null|| wmUser.getApUserId()==null){
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);

        }
        //        如果不为空，就查询数据库数据是否存在

        LambdaQueryWrapper<WmUser> query=new LambdaQueryWrapper<>();
        query.eq(WmUser::getApUserId,wmUser.getApUserId());
        WmUser one = this.getOne(query);
//        判断不为空就返回  为孔九田家
        if(one!=null){
            return ResponseResult.okResult(one);

        }
        wmUser.setCreatedTime(new Date());
        this.save(wmUser);
        return ResponseResult.okResult(wmUser);





    }

    @Override
    public ResponseResult login(LoginDto loginDto) {
//        第一点先判断前端传的参数（前端不可信）
        if(loginDto.getName()==null||loginDto==null){
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
//           叼他们
        }
//        如果有参数就开始查询了
        LambdaQueryWrapper<WmUser> query=new LambdaQueryWrapper<>();
        query.eq(WmUser::getName,loginDto.getName());
        WmUser one = this.getOne(query);
//        先判断是否能查出来查询出来的话就可以加盐判断了
        if(one==null){
            return ResponseResult.errorResult(AppHttpCodeEnum.AP_USER_DATA_NOT_EXIST);
//            线滚回去注册
        }
        String salt = one.getSalt();
        String pw=loginDto.getPassword()+salt;
        String s = DigestUtils.md5DigestAsHex(pw.getBytes());
//        那这个字符串和密码比对不成功则显示密码错误
        if(!s.equals(one.getPassword())){
            return ResponseResult.errorResult(AppHttpCodeEnum.LOGIN_PASSWORD_ERROR);
        }
//        如果成功的话 创建一个map集合将账号用户id 存进去生成token
        Map<String,Object> toMap=new HashMap<>();
        toMap.put("userId",one.getId());
        toMap.put("userName",one.getName());
        String token = AppJwtUtil.getToken(toMap);
//        返回前端想要的书据(顺便把敏感字段抹掉)
        Map<String,Object>map=new HashMap<>();
        one.setPassword(null);
        one.setPhone(null);
        map.put("user",one);
        map.put("token",token);



        return ResponseResult.okResult(map);
    }
}
